/* Function erfcf vectorized with SSE4.
   Copyright (C) 2021-2023 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   https://www.gnu.org/licenses/.  */

/*
 * ALGORITHM DESCRIPTION:
 *
 *   Approximation formula:
 *   erfc(x) ~ erfc(x0) - 2/sqrt(pi)*exp(-x0^2)*D * [ 1 + (x0*D)*p1(x0*D) + D^2 * p3(x0*D) ]
 *     D = x - x0
 *     erfc(x0) and 2/sqrt(pi)*exp(-x0^2)/(2*x0) are tabulated
 *
 *
 */

/* Offsets for data table __svml_serfc_data_internal
 */
#define _erfc_tbl			0
#define _AbsMask			5168
#define _MaxThreshold			5184
#define _SgnMask			5200
#define _SRound				5216
#define _TwoM48				5232
#define _poly1_0			5248
#define _poly1_1			5264
#define _poly3_0			5280
#define _poly3_1			5296
#define _poly1_2			5312
#define _poly1_3			5328
#define _UF_Threshold			5344
#define _TwoP48				5360

/* Lookup bias for data table __svml_serfc_data_internal.  */
#define Table_Lookup_Bias		-0x40000000

#include <sysdep.h>

	.section .text.sse4, "ax", @progbits
ENTRY(_ZGVbN4v_erfcf_sse4)
	subq	$72, %rsp
	cfi_def_cfa_offset(80)
	movaps	%xmm0, %xmm7
	movups	_AbsMask+__svml_serfc_data_internal(%rip), %xmm6

	/* vector gather: erfc_h(x0), (erfc_l(x0), 2/sqrt(pi)*exp(-x0^2)) */
	lea	Table_Lookup_Bias+__svml_serfc_data_internal(%rip), %rdi
	andps	%xmm7, %xmm6

	/*
	 * erfc(10.125) underflows to 0
	 * can compute all results in the main path
	 */
	minps	_MaxThreshold+__svml_serfc_data_internal(%rip), %xmm6
	movups	_SRound+__svml_serfc_data_internal(%rip), %xmm9
	movaps	%xmm9, %xmm13
	movups	_TwoM48+__svml_serfc_data_internal(%rip), %xmm0
	addps	%xmm6, %xmm13
	maxps	%xmm0, %xmm6
	movaps	%xmm13, %xmm4
	pslld	$3, %xmm13

	/* Start polynomial evaluation */
	movups	_poly1_0+__svml_serfc_data_internal(%rip), %xmm1
	subps	%xmm9, %xmm4
	movd	%xmm13, %eax
	movups	_poly3_0+__svml_serfc_data_internal(%rip), %xmm2
	subps	%xmm4, %xmm6
	mulps	%xmm6, %xmm4

	/* Diff^2 */
	movaps	%xmm6, %xmm9
	mulps	%xmm6, %xmm9
	mulps	%xmm4, %xmm1
	mulps	%xmm4, %xmm2
	addps	_poly1_1+__svml_serfc_data_internal(%rip), %xmm1
	addps	_poly3_1+__svml_serfc_data_internal(%rip), %xmm2
	mulps	%xmm4, %xmm1

	/* P3*D2 */
	mulps	%xmm9, %xmm2
	addps	_poly1_2+__svml_serfc_data_internal(%rip), %xmm1
	mulps	%xmm4, %xmm1
	pshufd	$1, %xmm13, %xmm11
	addps	_poly1_3+__svml_serfc_data_internal(%rip), %xmm1
	movd	%xmm11, %edx
	pshufd	$2, %xmm13, %xmm12
	pshufd	$3, %xmm13, %xmm14
	movd	%xmm12, %ecx
	movd	%xmm14, %esi
	movups	_SgnMask+__svml_serfc_data_internal(%rip), %xmm10
	andps	%xmm7, %xmm10

	/* P1 = P1*T + P3*D2 */
	mulps	%xmm1, %xmm4
	movaps	%xmm10, %xmm5
	movslq	%eax, %rax

	/* 2^(-64) with sign of input */
	orps	%xmm10, %xmm0
	movslq	%edx, %rdx

	/* Special arguments (for flags only) */
	movaps	%xmm7, %xmm1
	movslq	%ecx, %rcx
	addps	%xmm4, %xmm2
	cmpltps	_UF_Threshold+__svml_serfc_data_internal(%rip), %xmm1
	movslq	%esi, %rsi
	movups	_TwoP48+__svml_serfc_data_internal(%rip), %xmm8
	orps	%xmm8, %xmm5
	movq	(%rdi, %rax), %xmm3
	subps	%xmm8, %xmm5
	movq	(%rdi, %rdx), %xmm15
	movq	(%rdi, %rcx), %xmm8
	movq	(%rdi, %rsi), %xmm13
	unpcklps %xmm15, %xmm3
	unpcklps %xmm13, %xmm8
	movaps	%xmm3, %xmm10
	shufps	$238, %xmm8, %xmm3

	/* EXP_X0H * (1+P1) */
	mulps	%xmm3, %xmm2

	/* combine and get argument value range mask */
	movmskps %xmm1, %edx
	movlhps	%xmm8, %xmm10
	addps	%xmm2, %xmm3

	/* erfc_high(x0) - Diff * (2/sqrt(pi)*exp(-x0^2))*(1+P1) */
	mulps	%xmm3, %xmm6
	notl	%edx
	subps	%xmm6, %xmm10
	addps	%xmm10, %xmm5
	mulps	%xmm5, %xmm0
	andl	$15, %edx

	/* Go to special inputs processing branch */
	jne	L(SPECIAL_VALUES_BRANCH)
	# LOE rbx rbp r12 r13 r14 r15 edx xmm0 xmm7

	/* Restore registers
	 * and exit the function
	 */

L(EXIT):
	addq	$72, %rsp
	cfi_def_cfa_offset(8)
	ret
	cfi_def_cfa_offset(80)

	/* Branch to process
	 * special inputs
	 */

L(SPECIAL_VALUES_BRANCH):
	movups	%xmm7, 32(%rsp)
	movups	%xmm0, 48(%rsp)
	# LOE rbx rbp r12 r13 r14 r15 edx xmm0

	xorl	%eax, %eax
	movq	%r12, 16(%rsp)
	cfi_offset(12, -64)
	movl	%eax, %r12d
	movq	%r13, 8(%rsp)
	cfi_offset(13, -72)
	movl	%edx, %r13d
	movq	%r14, (%rsp)
	cfi_offset(14, -80)
	# LOE rbx rbp r15 r12d r13d

	/* Range mask
	 * bits check
	 */

L(RANGEMASK_CHECK):
	btl	%r12d, %r13d

	/* Call scalar math function */
	jc	L(SCALAR_MATH_CALL)
	# LOE rbx rbp r15 r12d r13d

	/* Special inputs
	 * processing loop
	 */

L(SPECIAL_VALUES_LOOP):
	incl	%r12d
	cmpl	$4, %r12d

	/* Check bits in range mask */
	jl	L(RANGEMASK_CHECK)
	# LOE rbx rbp r15 r12d r13d

	movq	16(%rsp), %r12
	cfi_restore(12)
	movq	8(%rsp), %r13
	cfi_restore(13)
	movq	(%rsp), %r14
	cfi_restore(14)
	movups	48(%rsp), %xmm0

	/* Go to exit */
	jmp	L(EXIT)
	cfi_offset(12, -64)
	cfi_offset(13, -72)
	cfi_offset(14, -80)
	# LOE rbx rbp r12 r13 r14 r15 xmm0

	/* Scalar math function call
	 * to process special input
	 */

L(SCALAR_MATH_CALL):
	movl	%r12d, %r14d
	movss	32(%rsp, %r14, 4), %xmm0
	call	erfcf@PLT
	# LOE rbx rbp r14 r15 r12d r13d xmm0

	movss	%xmm0, 48(%rsp, %r14, 4)

	/* Process special inputs in loop */
	jmp	L(SPECIAL_VALUES_LOOP)
	# LOE rbx rbp r15 r12d r13d
END(_ZGVbN4v_erfcf_sse4)

	.section .rodata, "a"
	.align	16

#ifdef __svml_serfc_data_internal_typedef
typedef unsigned int VUINT32;
typedef struct {
	__declspec(align(16)) VUINT32 _erfc_tbl[645*2][1];
	__declspec(align(16)) VUINT32 _AbsMask[4][1];
	__declspec(align(16)) VUINT32 _MaxThreshold[4][1];
	__declspec(align(16)) VUINT32 _SgnMask[4][1];
	__declspec(align(16)) VUINT32 _SRound[4][1];
	__declspec(align(16)) VUINT32 _TwoM48[4][1];
	__declspec(align(16)) VUINT32 _poly1_0[4][1];
	__declspec(align(16)) VUINT32 _poly1_1[4][1];
	__declspec(align(16)) VUINT32 _poly3_0[4][1];
	__declspec(align(16)) VUINT32 _poly3_1[4][1];
	__declspec(align(16)) VUINT32 _poly1_2[4][1];
	__declspec(align(16)) VUINT32 _poly1_3[4][1];
	__declspec(align(16)) VUINT32 _UF_Threshold[4][1];
	__declspec(align(16)) VUINT32 _TwoP48[4][1];
} __svml_serfc_data_internal;
#endif
__svml_serfc_data_internal:
	/* _erfc_tbl */
	.long	0x57800000, 0x57906ebb
	.long	0x577b7ca2, 0x579065b4
	.long	0x5776f9d5, 0x57904aa3
	.long	0x57727828, 0x57901d93
	.long	0x576df82b, 0x578fde94
	.long	0x57697a6e, 0x578f8dbd
	.long	0x5764ff7f, 0x578f2b2e
	.long	0x576087ea, 0x578eb70a
	.long	0x575c143d, 0x578e317d
	.long	0x5757a500, 0x578d9ab9
	.long	0x57533abf, 0x578cf2f5
	.long	0x574ed5fe, 0x578c3a6f
	.long	0x574a7744, 0x578b716c
	.long	0x57461f12, 0x578a9834
	.long	0x5741cdeb, 0x5789af18
	.long	0x573d844a, 0x5788b66c
	.long	0x573942ac, 0x5787ae8b
	.long	0x57350989, 0x578697d3
	.long	0x5730d956, 0x578572a8
	.long	0x572cb284, 0x57843f72
	.long	0x57289583, 0x5782fe9f
	.long	0x572482bd, 0x5781b0a0
	.long	0x57207a9b, 0x578055e8
	.long	0x571c7d80, 0x577ddddf
	.long	0x57188bcb, 0x577af867
	.long	0x5714a5da, 0x5777fc62
	.long	0x5710cc05, 0x5774ead4
	.long	0x570cfe9f, 0x5771c4c4
	.long	0x57093df9, 0x576e8b3e
	.long	0x57058a5e, 0x576b3f51
	.long	0x5701e415, 0x5767e20f
	.long	0x56fc96c6, 0x5764748e
	.long	0x56f5810a, 0x5760f7e5
	.long	0x56ee876d, 0x575d6d2d
	.long	0x56e7aa5a, 0x5759d57e
	.long	0x56e0ea35, 0x575631f4
	.long	0x56da4757, 0x575283a7
	.long	0x56d3c214, 0x574ecbb1
	.long	0x56cd5ab3, 0x574b0b28
	.long	0x56c71175, 0x57474323
	.long	0x56c0e692, 0x574374b5
	.long	0x56bada38, 0x573fa0ee
	.long	0x56b4ec8f, 0x573bc8dc
	.long	0x56af1db3, 0x5737ed89
	.long	0x56a96dbc, 0x57340ff9
	.long	0x56a3dcb7, 0x5730312e
	.long	0x569e6aaa, 0x572c5223
	.long	0x56991793, 0x572873cf
	.long	0x5693e369, 0x57249721
	.long	0x568ece1a, 0x5720bd06
	.long	0x5689d78f, 0x571ce661
	.long	0x5684ffa8, 0x5719140f
	.long	0x56804640, 0x571546e7
	.long	0x56775654, 0x57117fb9
	.long	0x566e5c65, 0x570dbf4c
	.long	0x56659e43, 0x570a0662
	.long	0x565d1b6d, 0x570655b1
	.long	0x5654d35d, 0x5702adeb
	.long	0x564cc57d, 0x56fe1f73
	.long	0x5644f12f, 0x56f6f777
	.long	0x563d55cc, 0x56efe513
	.long	0x5635f2a1, 0x56e8e968
	.long	0x562ec6f6, 0x56e20584
	.long	0x5627d207, 0x56db3a64
	.long	0x5621130b, 0x56d488f8
	.long	0x561a8931, 0x56cdf21c
	.long	0x561433a0, 0x56c7769b
	.long	0x560e117c, 0x56c11733
	.long	0x560821e1, 0x56bad48d
	.long	0x560263e5, 0x56b4af46
	.long	0x55f9ad39, 0x56aea7ea
	.long	0x55eef22b, 0x56a8bef3
	.long	0x55e494b6, 0x56a2f4ce
	.long	0x55da92eb, 0x569d49d9
	.long	0x55d0ead3, 0x5697be62
	.long	0x55c79a75, 0x569252aa
	.long	0x55be9fd3, 0x568d06e3
	.long	0x55b5f8ee, 0x5687db31
	.long	0x55ada3c2, 0x5682cfad
	.long	0x55a59e4c, 0x567bc8c2
	.long	0x559de68a, 0x56723298
	.long	0x55967a77, 0x5668dcc1
	.long	0x558f5812, 0x565fc70e
	.long	0x55887d5c, 0x5656f136
	.long	0x5581e856, 0x564e5adf
	.long	0x55772e0c, 0x56460399
	.long	0x556b0eeb, 0x563deae4
	.long	0x555f6f64, 0x5636102b
	.long	0x55544b9e, 0x562e72cb
	.long	0x55499fc8, 0x5627120f
	.long	0x553f681d, 0x561fed36
	.long	0x5535a0e6, 0x5619036e
	.long	0x552c4679, 0x561253dc
	.long	0x55235539, 0x560bdd96
	.long	0x551ac999, 0x56059fa9
	.long	0x5512a01c, 0x55ff3230
	.long	0x550ad554, 0x55f391b9
	.long	0x550365e5, 0x55e85bd0
	.long	0x54f89d02, 0x55dd8e4c
	.long	0x54eb17df, 0x55d326f3
	.long	0x54de360f, 0x55c92385
	.long	0x54d1f166, 0x55bf81b6
	.long	0x54c643dc, 0x55b63f32
	.long	0x54bb2790, 0x55ad59a1
	.long	0x54b096c5, 0x55a4cea4
	.long	0x54a68be5, 0x559c9bd9
	.long	0x549d0180, 0x5594bedd
	.long	0x5493f24c, 0x558d354b
	.long	0x548b5926, 0x5585fcbf
	.long	0x54833111, 0x557e25af
	.long	0x5476ea69, 0x5570ea68
	.long	0x546841c1, 0x556442f0
	.long	0x545a5f10, 0x55582a98
	.long	0x544d398b, 0x554c9cbd
	.long	0x5440c8ae, 0x554194c7
	.long	0x54350440, 0x55370e2c
	.long	0x5429e44f, 0x552d0474
	.long	0x541f612f, 0x55237336
	.long	0x5415737d, 0x551a561b
	.long	0x540c1417, 0x5511a8e1
	.long	0x54033c22, 0x5509675a
	.long	0x53f5ca07, 0x55018d6b
	.long	0x53e610c3, 0x54f42e22
	.long	0x53d74046, 0x54e600c0
	.long	0x53c94cd8, 0x54d88b05
	.long	0x53bc2b3a, 0x54cbc574
	.long	0x53afd0a5, 0x54bfa8c4
	.long	0x53a432c3, 0x54b42ddb
	.long	0x539947af, 0x54a94dcf
	.long	0x538f05f3, 0x549f01ec
	.long	0x5385647e, 0x549543ae
	.long	0x5378b557, 0x548c0cc2
	.long	0x5367c06a, 0x5483570a
	.long	0x5357da71, 0x54763931
	.long	0x5348f45f, 0x5466af65
	.long	0x533affda, 0x5458059c
	.long	0x532def39, 0x544a3127
	.long	0x5321b57a, 0x543d27b5
	.long	0x5316463d, 0x5430df57
	.long	0x530b95bd, 0x54254e7b
	.long	0x530198cc, 0x541a6bee
	.long	0x52f08999, 0x54102ed6
	.long	0x52df1f58, 0x54068eb5
	.long	0x52cedfb9, 0x53fb06c5
	.long	0x52bfb8a0, 0x53ea0a1d
	.long	0x52b198e5, 0x53da1876
	.long	0x52a4704e, 0x53cb237a
	.long	0x52982f7c, 0x53bd1d6f
	.long	0x528cc7eb, 0x53aff93b
	.long	0x52822be3, 0x53a3aa56
	.long	0x52709cde, 0x539824ce
	.long	0x525e46a9, 0x538d5d3c
	.long	0x524d3e18, 0x538348c6
	.long	0x523d6d6f, 0x5373ba24
	.long	0x522ec035, 0x53622096
	.long	0x52212321, 0x5351b22a
	.long	0x52148413, 0x53425d18
	.long	0x5208d1fc, 0x53341080
	.long	0x51fbf9ac, 0x5326bc5e
	.long	0x51e7eb29, 0x531a5183
	.long	0x51d55c2d, 0x530ec18c
	.long	0x51c43238, 0x5303feda
	.long	0x51b45472, 0x52f3f919
	.long	0x51a5ab93, 0x52e15ce8
	.long	0x519821ce, 0x52d0121b
	.long	0x518ba2bc, 0x52c002f8
	.long	0x51801b49, 0x52b11afe
	.long	0x516af33c, 0x52a346d7
	.long	0x51575a21, 0x5296744c
	.long	0x51454c24, 0x528a9237
	.long	0x5134ac3b, 0x527f20e7
	.long	0x51255f51, 0x526abfa9
	.long	0x51174c27, 0x5257e42f
	.long	0x510a5b3b, 0x524673af
	.long	0x50fced50, 0x52365507
	.long	0x50e7141d, 0x522770a1
	.long	0x50d304fc, 0x5219b066
	.long	0x50c09cb5, 0x520cffa3
	.long	0x50afba92, 0x52014af8
	.long	0x50a04037, 0x51ed0088
	.long	0x50921177, 0x51d91d2d
	.long	0x50851430, 0x51c6cc35
	.long	0x50726058, 0x51b5f011
	.long	0x505c9dfa, 0x51a66d2a
	.long	0x5048b7be, 0x519829c8
	.long	0x50368738, 0x518b0df2
	.long	0x5025e8e0, 0x517e06ab
	.long	0x5016bbdf, 0x5167ea53
	.long	0x5008e1df, 0x5153a034
	.long	0x4ff87dc3, 0x5141045e
	.long	0x4fe1721f, 0x512ff56d
	.long	0x4fcc712a, 0x51205461
	.long	0x4fb94efb, 0x51120475
	.long	0x4fa7e31e, 0x5104eafc
	.long	0x4f980855, 0x50f1de7a
	.long	0x4f899c5c, 0x50dbf4a3
	.long	0x4f78ff60, 0x50c7ee0e
	.long	0x4f612ab5, 0x50b5a381
	.long	0x4f4b8583, 0x50a4f0bc
	.long	0x4f37deef, 0x5095b43b
	.long	0x4f260a27, 0x5087cf0e
	.long	0x4f15de0f, 0x5076494d
	.long	0x4f0734f9, 0x505f355e
	.long	0x4ef3d8c4, 0x504a31bf
	.long	0x4edbc95e, 0x503711b4
	.long	0x4ec601e9, 0x5025ac0e
	.long	0x4eb24d81, 0x5015dae6
	.long	0x4ea07bca, 0x50077b62
	.long	0x4e906098, 0x4ff4daf4
	.long	0x4e81d395, 0x4fdd2782
	.long	0x4e695fe3, 0x4fc7a666
	.long	0x4e51a834, 0x4fb42611
	.long	0x4e3c42e7, 0x4fa2790f
	.long	0x4e28f835, 0x4f9275b9
	.long	0x4e179555, 0x4f83f5e9
	.long	0x4e07ec0b, 0x4f6dad68
	.long	0x4df3a498, 0x4f55f04f
	.long	0x4dda43ba, 0x4f407a1d
	.long	0x4dc37003, 0x4f2d1570
	.long	0x4daeea58, 0x4f1b9188
	.long	0x4d9c7974, 0x4f0bc1e7
	.long	0x4d8be963, 0x4efafbec
	.long	0x4d7a160c, 0x4ee14167
	.long	0x4d5f6759, 0x4eca10ce
	.long	0x4d477955, 0x4eb52cb9
	.long	0x4d3205fb, 0x4ea25d43
	.long	0x4d1ecdf3, 0x4e916f95
	.long	0x4d0d97f2, 0x4e823575
	.long	0x4cfc6061, 0x4e6909cc
	.long	0x4ce0cfd4, 0x4e506f88
	.long	0x4cc829c6, 0x4e3a56e4
	.long	0x4cb221ff, 0x4e268119
	.long	0x4c9e73c2, 0x4e14b538
	.long	0x4c8ce119, 0x4e04bfb1
	.long	0x4c7a6462, 0x4dece39b
	.long	0x4c5e6987, 0x4dd34296
	.long	0x4c457726, 0x4dbc4fdc
	.long	0x4c2f3bdb, 0x4da7c64b
	.long	0x4c1b6e79, 0x4d956771
	.long	0x4c09cd3e, 0x4d84fae8
	.long	0x4bf43a38, 0x4d6c9b8f
	.long	0x4bd85225, 0x4d52644f
	.long	0x4bbf8325, 0x4d3afd47
	.long	0x4ba977f0, 0x4d261be0
	.long	0x4b95e415, 0x4d137cf0
	.long	0x4b848320, 0x4d02e402
	.long	0x4b6a2f8b, 0x4ce8356b
	.long	0x4b4ed659, 0x4ccde050
	.long	0x4b369893, 0x4cb670d5
	.long	0x4b211e8a, 0x4ca19816
	.long	0x4b0e19e7, 0x4c8f0f43
	.long	0x4afa896f, 0x4c7d2da8
	.long	0x4adcc11e, 0x4c5febab
	.long	0x4ac26b7f, 0x4c45f27c
	.long	0x4aab2549, 0x4c2ee6b3
	.long	0x4a969605, 0x4c1a767c
	.long	0x4a846ee9, 0x4c0858a4
	.long	0x4a68d3a8, 0x4bf09770
	.long	0x4a4c90c6, 0x4bd42a75
	.long	0x4a33a635, 0x4bbb01dd
	.long	0x4a1db15b, 0x4ba4c066
	.long	0x4a0a5aa0, 0x4b9112d9
	.long	0x49f2a881, 0x4b7f5e08
	.long	0x49d4b277, 0x4b60a591
	.long	0x49ba58bd, 0x4b45867e
	.long	0x49a32ed5, 0x4b2d97f3
	.long	0x498ed4a2, 0x4b187c9e
	.long	0x4979ea08, 0x4b05e186
	.long	0x495a8951, 0x4aeaf9d4
	.long	0x493f01d9, 0x4ace1a8c
	.long	0x4926ddcc, 0x4ab4b0dc
	.long	0x4911b50d, 0x4a9e558a
	.long	0x48fe574a, 0x4a8aad05
	.long	0x48dde0d0, 0x4a72cc48
	.long	0x48c1776e, 0x4a547203
	.long	0x48a89cd3, 0x4a39cbe3
	.long	0x4892e1aa, 0x4a226937
	.long	0x487fc7c2, 0x4a0de652
	.long	0x485e9a3a, 0x49f7d629
	.long	0x4841a2c3, 0x49d85345
	.long	0x48285bae, 0x49bcba74
	.long	0x48124f79, 0x49a49254
	.long	0x47fe2dc4, 0x498f6fd2
	.long	0x47dcae77, 0x4979e90c
	.long	0x47bf81dd, 0x49599a7d
	.long	0x47a61c4e, 0x493d616c
	.long	0x47900357, 0x4924bcd6
	.long	0x47799750, 0x490f3b3e
	.long	0x47582e7f, 0x48f8f1a9
	.long	0x473b27a3, 0x48d83bc6
	.long	0x4721f2b6, 0x48bbbab7
	.long	0x470c11c0, 0x48a2e733
	.long	0x46f22d4c, 0x488d4a80
	.long	0x46d14266, 0x4874f900
	.long	0x46b4bacb, 0x485443df
	.long	0x469c03d6, 0x4837d5b2
	.long	0x46869d9b, 0x481f2272
	.long	0x46683120, 0x4809af94
	.long	0x46482706, 0x47ee23cf
	.long	0x462c7395, 0x47cdd76a
	.long	0x46148366, 0x47b1d636
	.long	0x45ffac6d, 0x4799912d
	.long	0x45dbf8fa, 0x47848b78
	.long	0x45bd2a88, 0x4764b060
	.long	0x45a298a1, 0x474530ba
	.long	0x458bb0fc, 0x4729f27c
	.long	0x456fe94b, 0x47126579
	.long	0x454deaf8, 0x46fc1860
	.long	0x4530a808, 0x46d8f2d6
	.long	0x45177b00, 0x46ba9c63
	.long	0x4501d48c, 0x46a06fec
	.long	0x44de7135, 0x4689de04
	.long	0x44be77a1, 0x466cd440
	.long	0x44a302b0, 0x464b505a
	.long	0x448b71e5, 0x462e74d6
	.long	0x446e7534, 0x46159f2a
	.long	0x444bca2d, 0x46004280
	.long	0x442e1414, 0x45dbc9bf
	.long	0x4414a0a8, 0x45bc396d
	.long	0x43fdac7d, 0x45a11d60
	.long	0x43d860d4, 0x4589d7a8
	.long	0x43b87a3a, 0x456bbf86
	.long	0x439d3454, 0x45497f9a
	.long	0x4385e630, 0x452c23f7
	.long	0x4363fd06, 0x4512fcf7
	.long	0x434200db, 0x44fae63c
	.long	0x4325014d, 0x44d607b0
	.long	0x430c4623, 0x44b67d4e
	.long	0x42ee627d, 0x449b855c
	.long	0x42ca7603, 0x44847920
	.long	0x42abde4b, 0x44619261
	.long	0x4291d40d, 0x443ff482
	.long	0x4277593c, 0x442344bf
	.long	0x4251abca, 0x440acd1c
	.long	0x4231a5c0, 0x43ebe2ca
	.long	0x42167152, 0x43c85727
	.long	0x41feaf84, 0x43aa1178
	.long	0x41d779e7, 0x43904cc0
	.long	0x41b63731, 0x4374c081
	.long	0x419a03db, 0x434f7703
	.long	0x41821dd0, 0x432fc5c4
	.long	0x415bbf2e, 0x4314d94a
	.long	0x41397862, 0x42fbf99c
	.long	0x411c770c, 0x42d52bb9
	.long	0x4103eeb4, 0x42b4411f
	.long	0x40de62c7, 0x429858a7
	.long	0x40bb5652, 0x4280b23e
	.long	0x409dbc89, 0x4259543f
	.long	0x4084bfc1, 0x42376979
	.long	0x405f551f, 0x421ab66b
	.long	0x403bc5f1, 0x420270af
	.long	0x401dccc2, 0x41dbd820
	.long	0x40048c16, 0x41b92c31
	.long	0x3fde907e, 0x419be496
	.long	0x3fbac490, 0x41832dcb
	.long	0x3f9ca73d, 0x415ca86a
	.long	0x3f8354cb, 0x41397eca
	.long	0x3f5c1947, 0x411bdc1e
	.long	0x3f3857fa, 0x4102e528
	.long	0x3f1a529e, 0x40dbc03f
	.long	0x3f0120ef, 0x40b85f58
	.long	0x3ed7fdc8, 0x409a9d36
	.long	0x3eb48e3e, 0x40819878
	.long	0x3e96dc65, 0x4059250b
	.long	0x3e7bfa7c, 0x4035d48d
	.long	0x3e5255b2, 0x40182f4c
	.long	0x3e2f7d27, 0x3ffe9ef1
	.long	0x3e12586c, 0x3fd4e64a
	.long	0x3df3f750, 0x3fb1ed7c
	.long	0x3dcb4137, 0x3f94a0bb
	.long	0x3da94169, 0x3f782f41
	.long	0x3d8ce028, 0x3f4f1cee
	.long	0x3d6a654e, 0x3f2cc100
	.long	0x3d42e7d6, 0x3f100645
	.long	0x3d21fd99, 0x3ef00749
	.long	0x3d0691c1, 0x3ec7ea70
	.long	0x3cdf78d9, 0x3ea66ce0
	.long	0x3cb976f2, 0x3e8a7a45
	.long	0x3c99d8e5, 0x3e665575
	.long	0x3c7f1de8, 0x3e3f778a
	.long	0x3c536be9, 0x3e1f14b2
	.long	0x3c2f2031, 0x3e041bb4
	.long	0x3c10fdbd, 0x3ddb4f88
	.long	0x3beff7df, 0x3db5f2ba
	.long	0x3bc67c0b, 0x3d96e08d
	.long	0x3ba417d4, 0x3d7a1a1e
	.long	0x3b879862, 0x3d4f30a7
	.long	0x3b5ffc37, 0x3d2b8e9a
	.long	0x3b38e85b, 0x3d0dfba1
	.long	0x3b1892fb, 0x3ceae636
	.long	0x3afbaaf5, 0x3cc2374f
	.long	0x3acf75d5, 0x3ca08024
	.long	0x3aaaef8c, 0x3c8492c0
	.long	0x3a8cc60c, 0x3c5ae75b
	.long	0x3a67c170, 0x3c34a340
	.long	0x3a3ead7b, 0x3c14fcf4
	.long	0x3a1cce14, 0x3bf5a5cf
	.long	0x3a00e32d, 0x3bca68ef
	.long	0x39d3c741, 0x3ba6b383
	.long	0x39ade7c9, 0x3b8939a3
	.long	0x398ebc8e, 0x3b61cfd0
	.long	0x396a31ee, 0x3b39b3ce
	.long	0x394008fe, 0x3b18a48b
	.long	0x391d638e, 0x3afad08d
	.long	0x3900ee61, 0x3acdf654
	.long	0x38d322ce, 0x3aa90c4d
	.long	0x38accb15, 0x3a8aaea4
	.long	0x388d5872, 0x3a636e45
	.long	0x3867216f, 0x3a3a6544
	.long	0x383ce218, 0x3a18b095
	.long	0x381a4894, 0x39fa092d
	.long	0x37fbec07, 0x39cc9f41
	.long	0x37cd9386, 0x39a76003
	.long	0x37a7acfd, 0x3988d758
	.long	0x3788b256, 0x395fa559
	.long	0x375ec64b, 0x3936ab0f
	.long	0x373570b9, 0x39152037
	.long	0x3713b43a, 0x38f35dd3
	.long	0x36f05d69, 0x38c67c0a
	.long	0x36c37bc4, 0x38a1ccfc
	.long	0x369ee7d7, 0x3883d518
	.long	0x36811c14, 0x3856b981
	.long	0x3651b337, 0x382ec87a
	.long	0x362a371c, 0x380e33a7
	.long	0x360a1932, 0x37e74660
	.long	0x35dff98b, 0x37bbfab1
	.long	0x35b589f6, 0x3798b6d4
	.long	0x3593127a, 0x37780230
	.long	0x356e2ef2, 0x37494905
	.long	0x3540c69d, 0x372348d9
	.long	0x351bf310, 0x370464b5
	.long	0x34fc31bf, 0x36d69685
	.long	0x34cbd1ee, 0x36add231
	.long	0x34a4a520, 0x368cbaf0
	.long	0x3484ef72, 0x3663c449
	.long	0x34568fd0, 0x363839e2
	.long	0x342d122f, 0x3614efa4
	.long	0x340b893c, 0x35f0b1df
	.long	0x33e0e3a6, 0x35c265d8
	.long	0x33b5237a, 0x359cede7
	.long	0x3391d42c, 0x357d3dc9
	.long	0x336ab0cb, 0x354c3b50
	.long	0x333cc25b, 0x3524a05e
	.long	0x3317be62, 0x3504a304
	.long	0x32f3db16, 0x34d59f46
	.long	0x32c3d8af, 0x34abf19f
	.long	0x329d3680, 0x348a545b
	.long	0x327c475d, 0x345e76f3
	.long	0x324a5141, 0x3432cc8c
	.long	0x32222c05, 0x340fa24c
	.long	0x3201edfc, 0x33e6a843
	.long	0x31d01833, 0x33b91cba
	.long	0x31a68f97, 0x33947ce5
	.long	0x318540a5, 0x336e1a5b
	.long	0x31551b65, 0x333eced8
	.long	0x312a535b, 0x3318d52b
	.long	0x31081119, 0x32f4b613
	.long	0x30d94acf, 0x32c3d10c
	.long	0x30ad6b36, 0x329c9d69
	.long	0x308a563f, 0x327a666d
	.long	0x305c98dc, 0x32481354
	.long	0x302fcd12, 0x321fc975
	.long	0x300c08aa, 0x31ff1904
	.long	0x2fdefaaf, 0x31cb87d8
	.long	0x2fb17113, 0x31a24ef3
	.long	0x2f8d22bb, 0x31815f38
	.long	0x2f60685f, 0x314e2339
	.long	0x2f3251c3, 0x3124258f
	.long	0x2f0da0c6, 0x3102a54d
	.long	0x2ee0dd25, 0x30cfdcca
	.long	0x2eb26c30, 0x30a54727
	.long	0x2e8d8121, 0x30835a7f
	.long	0x2e605773, 0x3050aec3
	.long	0x2e31bffd, 0x3025afef
	.long	0x2e0cc431, 0x30037c6d
	.long	0x2dded902, 0x2fd09664
	.long	0x2db04f61, 0x2fa55e85
	.long	0x2d8b6c69, 0x2f830aa5
	.long	0x2d5c66c4, 0x2f4f93fd
	.long	0x2d2e1f21, 0x2f2453fe
	.long	0x2d097e36, 0x2f0206a5
	.long	0x2cd908c8, 0x2ecdaaf4
	.long	0x2cab3670, 0x2ea293d6
	.long	0x2c86fff0, 0x2e8073d6
	.long	0x2c54ca13, 0x2e4ae1ac
	.long	0x2c279ec9, 0x2e2023e7
	.long	0x2c03f9af, 0x2dfcaee7
	.long	0x2bcfb860, 0x2dc74167
	.long	0x2ba363bd, 0x2d9d0c41
	.long	0x2b807524, 0x2d7770ea
	.long	0x2b49e3d6, 0x2d42d60c
	.long	0x2b1e92b5, 0x2d195702
	.long	0x2af8fac8, 0x2cf13ec4
	.long	0x2ac35eb5, 0x2cbdaded
	.long	0x2a993aaa, 0x2c95101b
	.long	0x2a703d5a, 0x2c6a2c50
	.long	0x2a3c3cf6, 0x2c37d975
	.long	0x2a136bd8, 0x2c104516
	.long	0x29e6cc51, 0x2be24fc5
	.long	0x29b493e1, 0x2bb16ad5
	.long	0x298d376b, 0x2b8b04c7
	.long	0x295cc356, 0x2b59c147
	.long	0x292c79ad, 0x2b2a759f
	.long	0x2906af30, 0x2b055f07
	.long	0x28d23edb, 0x2ad09a6a
	.long	0x28a4050c, 0x2aa30e6d
	.long	0x287fca72, 0x2a7ec8c1
	.long	0x28475b9c, 0x2a46f5b1
	.long	0x281b4cca, 0x2a1b4a74
	.long	0x27f1d725, 0x29f24b83
	.long	0x27bc361f, 0x29bcee14
	.long	0x27926764, 0x29933f23
	.long	0x2763a7e2, 0x29656858
	.long	0x2730ea36, 0x29329e84
	.long	0x27096aae, 0x290b01c6
	.long	0x26d55ed6, 0x28d840d5
	.long	0x26a59297, 0x28a82171
	.long	0x26806b7c, 0x2882a722
	.long	0x26471c70, 0x284af596
	.long	0x261a4874, 0x281d9063
	.long	0x25eefab5, 0x27f4865b
	.long	0x25b8fef0, 0x27bda5bb
	.long	0x258f232d, 0x27930395
	.long	0x255d6497, 0x2763d176
	.long	0x252b220e, 0x27306e78
	.long	0x25043806, 0x270891a3
	.long	0x24cc3533, 0x26d35285
	.long	0x249d9eab, 0x26a36ab9
	.long	0x247333ed, 0x267c9e87
	.long	0x243b895c, 0x2643294f
	.long	0x24108aa2, 0x2616b2d7
	.long	0x23deb305, 0x25e89e19
	.long	0x23ab79f7, 0x25b3722d
	.long	0x2383f8a5, 0x258a5c5b
	.long	0x234b094e, 0x255542a6
	.long	0x231c1be0, 0x252445ca
	.long	0x22eff061, 0x24fcf3b9
	.long	0x22b84dad, 0x24c2a818
	.long	0x228d7fe9, 0x2495b90c
	.long	0x22592b20, 0x246635db
	.long	0x222691fd, 0x2430e58d
	.long	0x21ff65e8, 0x2407dd07
	.long	0x21c3b3ec, 0x23d09839
	.long	0x2195e33f, 0x23a00d5e
	.long	0x21657c23, 0x23757e16
	.long	0x212f973d, 0x233c2e00
	.long	0x210649d6, 0x23102d3f
	.long	0x20cd4d83, 0x22dcd18d
	.long	0x209cdbfe, 0x22a904b4
	.long	0x206f93bd, 0x22814e73
	.long	0x2036de68, 0x2245c0eb
	.long	0x200b8405, 0x22172479
	.long	0x1fd4c713, 0x21e6ec36
	.long	0x1fa22d35, 0x21b0523d
	.long	0x1f771927, 0x21869086
	.long	0x1f3c2718, 0x214d4b0f
	.long	0x1f0f32ff, 0x211c85ba
	.long	0x1ed9ddc3, 0x20ee8f29
	.long	0x1ea5a71b, 0x20b5b53d
	.long	0x1e7bc87b, 0x208a5661
	.long	0x1e3f4167, 0x205288d5
	.long	0x1e11353d, 0x2020208a
	.long	0x1ddc631a, 0x1ff3754b
	.long	0x1da729d6, 0x1fb8fcbd
	.long	0x1d7d76ae, 0x1f8c7d97
	.long	0x1d4010bf, 0x1f554a3f
	.long	0x1d117833, 0x1f21d3cb
	.long	0x1cdc3fc3, 0x1ef57178
	.long	0x1ca6a764, 0x1eba0a73
	.long	0x1c7c141f, 0x1e8cf23a
	.long	0x1c3e8d91, 0x1e5575bf
	.long	0x1c0ff968, 0x1e218fb3
	.long	0x1bd974f4, 0x1df47139
	.long	0x1ba4246f, 0x1db8d48f
	.long	0x1b77ad8b, 0x1d8bb00a
	.long	0x1b3ac5c9, 0x1d5309be
	.long	0x1b0cc6a1, 0x1d1f56ba
	.long	0x1ad41c58, 0x1cf07de1
	.long	0x1a9fb806, 0x1cb56657
	.long	0x1a706b47, 0x1c88c2bc
	.long	0x1a34dbfa, 0x1c4e1cba
	.long	0x1a07fd09, 0x1c1b3d7d
	.long	0x19cc668e, 0x1be9bbfd
	.long	0x19998a40, 0x1bafdf73
	.long	0x19668edd, 0x1b844540
	.long	0x192d054e, 0x1b46dbe6
	.long	0x1901c77a, 0x1b156976
	.long	0x18c29845, 0x1ae0691f
	.long	0x1891d1e0, 0x1aa8720d
	.long	0x185a6f34, 0x1a7cc054
	.long	0x18238672, 0x1a3d887f
	.long	0x17f4b806, 0x1a0e0ecc
	.long	0x17b70648, 0x19d4d840
	.long	0x1788d12d, 0x199f5fda
	.long	0x174c739d, 0x196e8e9b
	.long	0x1718afac, 0x193273f8
	.long	0x16e3f1ae, 0x19056d4a
	.long	0x16aa10bb, 0x18c76cf4
	.long	0x167da48f, 0x1894f659
	.long	0x163d0e1a, 0x185e6d9a
	.long	0x160cd879, 0x1825fb65
	.long	0x15d1c1e5, 0x17f7998c
	.long	0x159c1df9, 0x17b895e1
	.long	0x1568466d, 0x17898a88
	.long	0x152cb568, 0x174cdf9b
	.long	0x15005b01, 0x1718826b
	.long	0x14beb151, 0x16e2f29a
	.long	0x148d955e, 0x16a8c6d9
	.long	0x14522407, 0x167ae8e3
	.long	0x141bdf21, 0x163a6a2d
	.long	0x13e71f72, 0x160a6e25
	.long	0x13ab44c3, 0x15cd7e87
	.long	0x137db4e3, 0x15987319
	.long	0x133bd23f, 0x156215a4
	.long	0x130afa70, 0x15278fa9
	.long	0x12cd92ee, 0x14f840ab
	.long	0x1297f777, 0x14b7cfb1
	.long	0x1260915e, 0x148807fd
	.long	0x1225d8aa, 0x14493e73
	.long	0x11f4d72b, 0x1414c97a
	.long	0x11b4a474, 0x13dbe665
	.long	0x11853669, 0x13a26be2
	.long	0x11446065, 0x136fd110
	.long	0x1110acc4, 0x1330f593
	.long	0x10d51115, 0x13028371
	.long	0x109cd187, 0x12c06c14
	.long	0x1066ba07, 0x128dc782
	.long	0x1029a6c1, 0x1250d3f6
	.long	0x0ff95d83, 0x1219b798
	.long	0x0fb72d9a, 0x11e230b9
	.long	0x0f867e41, 0x11a655c1
	.long	0x0f456641, 0x117484a6
	.long	0x0f10cb43, 0x1133a328
	.long	0x0ed44fd3, 0x1103e85c
	.long	0x0e9b94c1, 0x10c19ffd
	.long	0x0e63e84a, 0x108e0a3d
	.long	0x0e26d8e4, 0x10504b66
	.long	0x0df42c6c, 0x1018a6f6
	.long	0x0db294f0, 0x0fdfa367
	.long	0x0d828bdd, 0x0fa3bcb5
	.long	0x0d3ec540, 0x0f6fa4d1
	.long	0x0d0b5230, 0x0f2f48cc
	.long	0x0ccb653b, 0x0f00259a
	.long	0x0c946596, 0x0ebb479f
	.long	0x00000000, 0x00000000
	.align	16
	.long	0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff /* _AbsMask */
	.align	16
	.long	0x41210000, 0x41210000, 0x41210000, 0x41210000 /* _MaxThreshold=644.0/64.0 */
	.align	16
	.long	0x80000000, 0x80000000, 0x80000000, 0x80000000 /* sign mask */
	.align	16
	.long	0x48000000, 0x48000000, 0x48000000, 0x48000000 /* SRound */
	.align	16
	.long	0x27800000, 0x27800000, 0x27800000, 0x27800000 /* _TwoM48 */
	// polynomial coefficients
	.align	16
	.long	0x3e08a7ca, 0x3e08a7ca, 0x3e08a7ca, 0x3e08a7ca // poly1[0]
	.align	16
	.long	0xbeaacf22, 0xbeaacf22, 0xbeaacf22, 0xbeaacf22 // poly1[1]
	.align	16
	.long	0x3f005b36, 0x3f005b36, 0x3f005b36, 0x3f005b36 // poly3[0]
	.align	16
	.long	0xbeab4edb, 0xbeab4edb, 0xbeab4edb, 0xbeab4edb // poly3[1]
	.align	16
	.long	0x3f2aaaa6, 0x3f2aaaa6, 0x3f2aaaa6, 0x3f2aaaa6 // poly1[2]
	.align	16
	.long	0xbf7ffffc, 0xbf7ffffc, 0xbf7ffffc, 0xbf7ffffc // poly1[3]
	.align	16
	.long	0x4120DDFB, 0x4120DDFB, 0x4120DDFB, 0x4120DDFB /* UF_Threshold */
	.align	16
	.long	0x57800000, 0x57800000, 0x57800000, 0x57800000 /* 2^48 */
	.align	16
	.type	__svml_serfc_data_internal, @object
	.size	__svml_serfc_data_internal, .-__svml_serfc_data_internal
